perm filename QUAD.F4[TMP,LCS] blob
sn#099891 filedate 1974-09-17 generic text, type T, neo UTF8
00002 C QUAD CALL MUST BE IN 1ST OF 5 PARAMS. QUAD MUST BE FOLLOWED
00008 C BY SPC, / OR ;. OTHER CALLS SUCH AS MOVE,NUM ETC. CAN
00014 C APPEAR BEFORE / OR ;, BUT "ALL" MUST! APPEAR
00020 C BEFORE! QUAD (IF USED).
00026 C *** THE 5TH PARAM MUST NOT!! BE LISTED AT ALL IN YOUR SCORE!!! ****
00032 C ADD AN "F" TO QUAD FOR FUNCTIONS, AN "X" FOR X,Y COORDS.
00038 C BASIC QUAD PRODUCES CIRCLES. /DEGS/RADIUS/CENT. X/CENT. Y/
00044 C QUADX -- /X /Y / (5TH PARAM WILL ALWAYS BE WASTED)
00050 CC43611 IF(N.NE.'Q'.OR.INP(JD+1).NE.'U')GO TO 4361
00056 CC QX=-13.
00062 CC DO 43612 N=JD,72
00068 CC J=INP(N)
00074 CC IF(J.EQ.IXX)QX=QX-1.
00080 CC IF(J.EQ.IF)QX=QX-2.
00100 SUBROUTINE QUAD(NL)
00200 COMMON P(30),INUM,IPAR,CNT(27),BT,PL(48),IREST,DF,DUR(27)
00300 C INUM=INST# IPAR=PARAM#
00320 C BT=BASIC TIME P1 WHEN SUBROUTINE IS CALLED
00400 C IF IREST IS <0, THAT NOTE WILL BE A REST.
00500 C INST=INST. NAME, BG=INSTS' BEGIN TIMES.
00600 C NOTE #S IN SUBROUTINE: (1-84)
00620 C C4=37 FS4=43 C5=49 ETC. F1=86 F15=100 (NO F16!)
00700
00800 DIMENSION F(5,512),IP(1),ISU(1400),ALF(4),IPATH(2,512),
00820 1 ICA(4),ICB(4),ARY(9),IDOP(4,5)
00900 DATA ICA/-106,90,90,-106/,IDOP/-108,406,168,406,
00950 1 -88,466,-88,346, -24,376,-24,436, 40,376,40,436,
01000 1 104,376,104,436/, ICB/90,90,-106,-106/,ALF/'A','B','C','D'/
01050 1 , ARY/45H(' ARRAY F',I2,'(512); SEG(F',I2,');0 999') /
01055 C /DEG OR X/DIS OR Y/CEN OF CIRC X/CEN OF CIRCLE Y/(CALLS QUAD)/
01200 IF(CNT(INUM).GT.1.)GO TO 1
01400 L=0
01420 ARY(3)=5H',I1,
01460 ARY(7)=5HI1,')
01500 NJ=IPAR-4
01525 XF=999.
01550 DIF=0
01575 DURFAC=(DUR(INUM)-P(1))/512.+.000001
01587 C WON'T CREATE FUNCS OF DPY FOR MORE THAN 1 INST
01595 1 CALL QUADO(P,IPAR,NL,XF,YF)
01600 DIF=DIF+P(2)
01610 IF(DIF)RETURN
01620 C GET ANOTHER NNTE FOR THIS FUNC. SLOT
01630 3 L=L+1
01800 M=0
01900 DO 4 K=NJ,IPAR
02000 M=M+1
02100 4 F(M,L)=P(K)
02200 IPATH(1,L)=XF*10.
02300 IPATH(2,L)=YF*10.
02400 IF(L.EQ.512)GO TO 2
02410 DIF=DIF-DURFAC
02420 IF(DIF.GE.0)GO TO 3
02430 C USE ANOTHER FUNC. SLOT FOR THIS NOTE
02440 RETURN
02450 C DUR SHOULD BE SET CLOSE TO "TRUE" DUR.
02500 2 CALL DPYSET(1,ISU,1400)
02600 CALL DPYBRT(2)
02610 IT=-460
02620 IB=-495
02630 999 I=0
02700 CALL TYPLOC(IT,IB)
02800 I=230
02900 J=506
03000 LB=250
03100 DO 5 K=1,2
03200 L=255
03300 IB=236
03400 JB=456
03500 DO 6 M=1,2
03600 CALL ALINE(I,L,J,L)
03700 C HORIZANTAL LINES
03800 CALL ALINE(LB,IB,LB,JB)
03820 C VERTICAL LINES
03822 DO 7 KB=LB+192,LB+64,-64
03824 7 CALL ALINE(KB,L,KB,IB)
03826 C SPACE MARKERS ON FUNC DPYS.
03830 IF(K.NE.1.OR.M.NE.1)GO TO 66
03840 C NEXT SETS UP DOPPLER DPY GRID
03850 DO 55 KB=1,5
03860 55 CALL ALINE(IDOP(1,KB),IDOP(2,KB),IDOP(3,KB),IDOP(4,KB))
04000 66 L=-441
04100 IB=-460
04200 6 JB=-240
04300 LB=-466
04400 I=-486
04500 5 J=-210
04600
04700 CALL ALINE(-200,-200,200,200)
04780 CALL ALINE(-200,200,200,-200)
04860 C MARKS LISTENER POS.
04940
05020 A=4.
05100 L=0
05180 I=141.4
05260 J=-1
05340 140 IB=141.4*SIND(A)
05420 JB=141.4*COSD(A)
05500 IF(J.GE.0)GO TO 141
05580 CALL ALINE(L,I,IB,JB)
05660 141 A=A+4.
05740 J=J+1
05800 IF(J.EQ.2)J=-1
05822 L=IB
05823 I=JB
05825 IF(A.LT.360.)GO TO 140
05830 C THE SPEAKER CIRCLE. MAKES DASHES, EVERY 3RD SEG.
05835
05895 CALL DPYBRT(5)
05897 CALL DPYBIG(6)
05900 DO 14 K=1,4
06000 14 CALL DPYTXT(ICA(K),ICB(K),ALF(K),1)
06100
06200 CALL DPYOUT(1)
06250
06300 DO 777 K=512,1,-1
06350 777 IF(F(5,K).EQ.0)F(5,K)=F(5,K+1)
06420 C FIXES UP ZERO MULTIPLIERS IN DOPPLER FUNC.
06500 77 M=1
06600 IB=-466
06700 J=256
06750 RM=200.
06800 DO 8 K=NJ,IPAR-1
06810 IF(M.NE.2)GO TO 88
06828 M=5
06840 RM=300.
06843 C TO ENLARGE DPY OF DOPPLER
06846 IB=-88
06864 J=106
06880 88 JB=F(M,1)*RM+J
06882 C DRAWS DOPPLER FUNC.
06900 CALL AIVECT(IB,JB)
07000 DO 9 L=2,512,3
07100 I=IB+L/2
07200 C REDUCES TO FIT 1/4 OF SCREEN
07300 JB=F(M,L)*RM+J
07400 9 CALL AVECT(I,JB)
07500 IF(M.NE.5)GO TO 99
07510 RM=200.
07520 M=2
07540 J=256
07560 IB=250
07570 C GOES BACK TO DRAW SPKR B FUNC.
07580 GO TO 88
07600 99 M=M+1
07700 IB=250
07800 IF(M.EQ.3)J=-440
07900 IF(M.EQ.4)IB=-466
08000 8 CONTINUE
08100
08200 CQ CALL DPYOUT(1)
08400 CALL AIVECT(IPATH(1,1),IPATH(2,1))
08450 KN=5
08500 DO 13 K=2,512,3
08600 I=IPATH(1,K)
08700 JB=IPATH(2,K)
08800 IF(IABS(JB).GT.512.OR.IABS(I).GT.512)GO TO 13
08810 CALL AVECT(I,JB)
08822 IF(K.EQ.191.OR.K.EQ.383)GO TO 131
08823 IF(MOD(K,64)-1)131,131,13
08825 C PUTS MARK EACH 1/8 OF PATH (NONE AT START)
08830 131 CALL AVECT(I+7,JB)
08840 CALL AVECT(I+7,JB+7)
08841 CALL AVECT(I,JB+7)
08850 CALL AVECT (I,JB)
09050 13 CONTINUE
09100 CALL DPYOUT(1)
09300 TYPE 112
09400 ACCEPT 113,NAME,LB
09420 333 IF(LB.EQ.0)GO TO 130
09440 C JUMP IF NOT SAVING DPY BUFFER
09460 IP(1)=IP(3)+2
09480 C IP(3) IS REALLY ISU(2). I.E. WDCNT
09490 CALL SAVB(IP)
09495 C WRITES A BINARY FILE OF DPY BUFFER FOR "PLTVEC"
09500 130 IF(NAME.EQ.' ')RETURN
09505 CC130 IF(NAME.EQ.' '.OR.MOD(NL,2).EQ.0)RETURN
09512 CCC --- THIS IS CHANGED RETURN IF QUAD OR QUADX(-13,-15)
09520 C WRITE FUNCS IF QUADF OR QUADFX (-14,-16)
09600 REWIND 23
09700 CALL OFILE(23,NAME)
09800 DO 10 K=1,5
09900 IF(NJ.LT.10)GO TO 100
09950 ARY(3)=5H',I2,
09975 ARY(7)=5HI2,')
10000 100 WRITE(23,ARY)NJ,NJ
10300 101 WRITE(23,12)(F(K,N),N=1,512)
10400 10 NJ=NJ+1
10500 END FILE 23
10520 TYPE 114,NAME
10600 RETURN
10900 12 FORMAT(16F8.5/)
11000 112 FORMAT(' TYPE FILE NAME TO SAVE FUNCS -- '$)
11100 113 FORMAT(A5,I)
11120 114 FORMAT(' FUNCTIONS ARE IN ',A5,'.DAT'/)
11200 END